//package cn.nfwx.tv.controller;
//
//import android.content.Context;
//import android.support.annotation.Nullable;
//import android.support.v4.app.FragmentManager;
//import android.util.AttributeSet;
//import android.view.LayoutInflater;
//import android.view.View;
//import android.widget.ImageView;
//import android.widget.LinearLayout;
//import android.widget.TextView;
//
//import com.google.gson.Gson;
//
//import org.json.JSONObject;
//
//import java.text.SimpleDateFormat;
//import java.util.ArrayList;
//import java.util.Date;
//import java.util.List;
//
//import cn.nfwx.tv.R;
//import cn.nfwx.tv.callback.ResponseListener;
//import cn.nfwx.tv.helper.DialogFragmentHelper;
//import cn.nfwx.tv.helper.ThreadHelper;
//import cn.nfwx.tv.manager.TimelineManager;
//import cn.nfwx.tv.model.LiveDetail;
//import cn.nfwx.tv.model.ThumbDetail;
//import cn.nfwx.tv.okhttp.CustomOkHttpClient;
//import cn.nfwx.tv.okhttp.UrlHelper;
//import cn.nfwx.tv.service.DownloadService;
//import cn.nfwx.tv.util.GlideUtil;
//import cn.nfwx.tv.util.LogUtil;
//import cn.nfwx.tv.widget.seekbar.ClipRangeSeekBar;
//import cn.nfwx.tv.widget.seekbar.RangeSeekBar;
//import p2psvideo.Interfaces;
//import p2psvideo.P2PSPlayer;
//
///**
// * Created by zhouzechao on 2017/11/21.
// */
//
//public class TimelineViewController extends LinearLayout implements P2PSPlayer.IController, RangeSeekBar.OnRangeChangedListener {
//
//    private final String TAG = TimelineViewController.class.getSimpleName();
//
//    private ImageView iv_player_thumb, player_start_btn;
//    private View ll_clip;
//    private TextView clip_bottom_cancle, clip_bottom_sure, clip_tv_time_start, clip_tv_time_end, time_code;
//    private SimpleDateFormat _sf;
//    private P2PSPlayer _player;
//    private ClipRangeSeekBar crsb_time;
//
//    private String requestLiveDetailCommand, requestLiveTimeCodesCommand;
//    private LiveDetail detail;
//    private boolean _hasShit;
//    private boolean _hasSeek;
//    private boolean _isFirstFPS;
//    private int mLastStart;
//    private int mLastEnd;
//    private long mFirstTime;
//    private long mEndTime;
//    private long mLaststartTime;
//    private long mLastEndTime;
//    private final List<Long> timeCodes = new ArrayList<>();
//
//    private FragmentManager fragmentManager;
//    private String mClipPath;
//    private boolean _hasPlay = false;
//    private boolean _shouldplay = true;
//
//
//    public Long getStartTime() {
//        return mLaststartTime;
//    }
//
//    public String getClipPath() {
//        return mClipPath;
//    }
//
//    public long getEndTime() {
//        return mLastEndTime;
//    }
//
//    public LiveDetail getLiveDetail() {
//        return detail;
//    }
//
//    public TimelineViewController(Context context) {
//        this(context, null);
//    }
//
//    public TimelineViewController(Context context, @Nullable AttributeSet attrs) {
//        this(context, attrs, 0);
//    }
//
//    public TimelineViewController(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
//        super(context, attrs, defStyleAttr);
//
//        init();
//    }
//
//    private void init() {
//        if (_sf == null) {
//            _sf = new SimpleDateFormat("HH:mm:ss");
//        }
//
//        LayoutInflater.from(getContext()).inflate(R.layout.layout_time_view_controller, this, true);
//        crsb_time = findViewById(R.id.crsb_time);
//
//        ll_clip = findViewById(R.id.ll_clip);
//        clip_bottom_cancle = findViewById(R.id.clip_bottom_cancle);
//        clip_bottom_sure = findViewById(R.id.clip_bottom_sure);
//        clip_tv_time_start = findViewById(R.id.clip_tv_time_start);
//        time_code = findViewById(R.id.time_code);
//        clip_tv_time_end = findViewById(R.id.clip_tv_time_end);
//        crsb_time.setOnRangeChangedListener(this);
//        crsb_time.clearRangseekbar();
//    }
//
//    /**
//     * 设置缩略图的
//     *
//     * @param imageView
//     */
//    public void setBmpView(ImageView imageView) {
//        iv_player_thumb = imageView;
//    }
//
//    /**
//     * @param playerView
//     */
//    public void setPlayerView(ImageView playerView) {
//        player_start_btn = playerView;
//    }
//
//    /**
//     * 获取直播信息
//     */
//    public void requestLiveDetail(FragmentManager supportFragmentManager, final String path) {
//        LogUtil.e(TAG, path);
//        fragmentManager = supportFragmentManager;
//        DialogFragmentHelper.showLoadingDialog(fragmentManager, "加载中");
//        crsb_time.setEnabled(false);
//        requestLiveDetailCommand = TimelineManager.requestTimeliveLiveDetail(getContext(), path, timeCallBack);
//    }
//
//    /**
//     * 获取缩略图的时间轴
//     *
//     * @param path
//     */
//    private void requestLiveTimeCodes(String path) {
//        LogUtil.e(TAG, path);
//        mClipPath = path;
//        crsb_time.setClipPath(mClipPath);
//        DialogFragmentHelper.showLoadingDialog(fragmentManager, "加载中");
//        requestLiveTimeCodesCommand = TimelineManager.requestTimelineImageTimeCodes(getContext(), path, timeCallBack);
//    }
//
//    public void setProgramItemListener(OnClickListener clickListener) {
//        clip_bottom_cancle.setOnClickListener(clickListener);
//        clip_bottom_sure.setOnClickListener(clickListener);
//        ll_clip.setOnClickListener(clickListener);
//    }
//
//    /**
//     * 请求回调
//     */
//    ResponseListener timeCallBack = new ResponseListener<JSONObject>() {
//        @Override
//        public void onResponse(final String requestTag, final JSONObject response) {
//            LogUtil.e(TAG, response.toString());
//            Gson gson = new Gson();
//            if (requestTag.equals(requestLiveDetailCommand)) { // 请求详情
//                detail = gson.fromJson(response.toString(), LiveDetail.class);
//                if (detail != null && detail.getSubstreams() != null && !detail.getSubstreams().isEmpty()) {
//                    requestLiveTimeCodes(detail.getSubstreams().get(0).getPath());
//                }
//            } else if (requestTag.equals(requestLiveTimeCodesCommand)) { // 请求缩略图的TimeCodes
//                ThumbDetail thumDetail = gson.fromJson(response.toString(), ThumbDetail.class);
//                timeCodes.clear();
//                timeCodes.addAll(getClipInterval(thumDetail.getThumbnails().getSmall().getImages()));
//                ThreadHelper.removeRunnable(timeRunnable);
//                ThreadHelper.post(timeRunnable);
//            }
//        }
//
//        Runnable timeRunnable = new Runnable() {
//            @Override
//            public void run() {
//                if (!timeCodes.isEmpty()) {
//                    mLastStart = 0;
//                    mLastEnd = timeCodes.size() - 1;
//                    long min = timeCodes.get(0);
//                    long max = timeCodes.get(timeCodes.size() - 1);
//                    mLaststartTime = min;
//                    mLastEndTime = max;
//                    mFirstTime = min;
//                    mEndTime = max;
//                    _hasShit = true;
//                    _hasSeek = false;
//
//                    clip_tv_time_start.setText(_sf.format(new Date(min * 1000L)));
//                    clip_tv_time_end.setText(_sf.format(new Date(max * 1000L)));
//
//                    crsb_time.setData(timeCodes);
//                    crsb_time.setEnabled(true);
//                }
//                // 首帧
//                _player.setOnSeekCompleteListener(new Interfaces.OnSeekCompleteListener() {
//                    @Override
//                    public void onSeekComplete() {
//                        if (!_hasPlay) {
//                            PlayerViewController.getInstance().playPause();
//                        } else {
//                            _hasPlay = false;
//                        }
//                        PlayerViewController.getInstance().seekComplete();
//                        crsb_time.setShowProgress(false);
//                        iv_player_thumb.setVisibility(GONE);
//                    }
//                });
//                _hasPlay = false;
//                iv_player_thumb.setVisibility(VISIBLE);
//                GlideUtil.loadImageNotPlace(getContext(), UrlHelper.getThumbUrl(mClipPath, mLaststartTime), iv_player_thumb);
//                _player.seekByTimeCode(mLaststartTime * 1000D, true, true, true);
//                PlayerViewController.getInstance().seek();
//            }
//        };
//
//        @Override
//        public void onError(String requestTag, Throwable t) {
//            if (requestTag.equals(requestLiveDetailCommand)) {
//
//            } else if (requestTag.equals(requestLiveTimeCodesCommand)) {
//
//            }
//        }
//
//        @Override
//        public void onFinish() {
//            ThreadHelper.post(new Runnable() {
//                @Override
//                public void run() {
//                    DialogFragmentHelper.closeLoadingDialog(fragmentManager);
//                }
//            });
//        }
//    };
//
//    /***
//     * 提前10中从裁剪时间倒数3分钟
//     * @param str
//     * @return
//     */
//    private List<Long> getClipInterval(List<Long> str) {
//        if (str == null || str.isEmpty()) {
//            return null;
//        }
//        long nowtime = str.get(str.size() - 1);
//        long endtime = nowtime - 20;
//        long starttime = endtime - 180;
//        List<Long> list = new ArrayList<>();
//        for (int i = 0; i < str.size(); i++) {
//            if (str.get(i) > starttime && str.get(i) < endtime) {
//                list.add(str.get(i));
//            }
//        }
//        return list;
//    }
//
//    @Override
//    public void attachPlayer(P2PSPlayer player) {
//        _player = player;
//    }
//
//    @Override
//    public void detachPlayer() {
//        _player = null;
//    }
//
//    @Override
//    public void showController() {
//
//    }
//
//    @Override
//    public void hideController() {
//
//    }
//
//    @Override
//    public void statusChanged() {
//
//    }
//
//    @Override
//    public void updatePosition(int position, int duration) {
//        double t = _player.getTimeCode();
//        if (t > 0) {
//            time_code.setText(_sf.format(new Date((long) t)));
//        } else {
//            time_code.setText("00:00:00");
//        }
//        if (t >= mLastEndTime * 1000L) {
//            _hasShit = true;
//            pause();
//        } else {
//            for (int i = 0; i < timeCodes.size(); i++) {
//                long per = timeCodes.get(i);
//                if ((i + 1) < timeCodes.size()) {
//                    long next = timeCodes.get(i + 1);
//                    if (t > per * 1000L && t < next * 1000L) {
//                        crsb_time.setProgress(i + 1);
//                        break;
//                    }
//                }
//            }
//        }
//    }
//
//    @Override
//    public void playSourceChanged() {
//
//    }
//
//    /**
//     * ==========rangseekbar=======
//     */
//    @Override
//    public void onRangeChanged(RangeSeekBar view, float min, float max) {
//        //LogUtil.e(TAG, min + "--onRangeChanged-" + max);
//        pause();
//        int start = (int) Math.floor(min);
//        int end = (int) Math.ceil(max);
//        if (timeCodes.isEmpty()) {
//            return;
//        }
//        long startTime = timeCodes.get(start);
//        long endTime = timeCodes.get(end);
//        clip_tv_time_start.setText(_sf.format(new Date(startTime * 1000L)));
//        clip_tv_time_end.setText(_sf.format(new Date(endTime * 1000L)));
//
//        // 设置缩略图
//        if (start != mLastStart) {
//            iv_player_thumb.setVisibility(VISIBLE);
//            mLastStart = start;
//            GlideUtil.loadImageNotPlace(getContext(), UrlHelper.getThumbUrl(mClipPath, startTime), iv_player_thumb);
//        }
//        //
//        if (end != mLastEnd) {
//            iv_player_thumb.setVisibility(VISIBLE);
//            mLastEnd = end;
//            GlideUtil.loadImageNotPlace(getContext(), UrlHelper.getThumbUrl(mClipPath, endTime), iv_player_thumb);
//        }
//    }
//
//    @Override
//    public void onRangeChangedFinish(RangeSeekBar view, float min, float max) {
//        if (timeCodes.isEmpty()) {
//            return;
//        }
//        int start = (int) Math.floor(min);
//        int end = (int) Math.ceil(max);
//
//        if (end >= timeCodes.size()) {
//            return;
//        }
//
//        long laststartTime = timeCodes.get(start);
//        long lastEndTime = timeCodes.get(end);
//        _hasShit = true;
//
//        _player.setOnSeekCompleteListener(new Interfaces.OnSeekCompleteListener() {
//            @Override
//            public void onSeekComplete() {
//                if (!_hasPlay) {
//                    PlayerViewController.getInstance().playPause();
//                } else {
//                    _hasPlay = false;
//                }
//                PlayerViewController.getInstance().seekComplete();
//                if (crsb_time != null) {
//                    crsb_time.setShowProgress(false);
//                }
//                if (iv_player_thumb != null) {
//                    iv_player_thumb.setVisibility(GONE);
//                }
//            }
//        });
//
//        if (laststartTime != mLaststartTime) {
//            _hasSeek = true;
//            mLaststartTime = laststartTime;
//            _player.seekByTimeCode(mLaststartTime * 1000D, true, true, true);
//        } else if (lastEndTime != mLastEndTime) {
//            mLastEndTime = lastEndTime;
//            _player.seekByTimeCode(mLastEndTime * 1000D, true, true, true);
//        }
//        _hasPlay = false;
//        PlayerViewController.getInstance().seek();
//    }
//
//    @Override
//    public void onProgressChanged(RangeSeekBar view, float progress) {
//        PlayerViewController.getInstance().playPause();
//        int start = (int) Math.floor(progress);
//        long startTime = timeCodes.get(start);
//        time_code.setText(_sf.format(new Date(startTime * 1000L)));
//        iv_player_thumb.setVisibility(VISIBLE);
//        GlideUtil.loadImageNotPlace(getContext(), UrlHelper.getThumbUrl(mClipPath, startTime), iv_player_thumb);
//    }
//
//    @Override
//    public void onProgressFinish(RangeSeekBar view, float progress) {
//        player_start_btn.setVisibility(View.GONE);
//        iv_player_thumb.setVisibility(GONE);
//        int start = (int) Math.floor(progress);
//        long startTime = timeCodes.get(start);
//        _player.clearScreen();
//        // 时间移动完成
//        _player.setOnSeekCompleteListener(PlayerViewController.getInstance());
//        _player.seekByTimeCode(startTime * 1000D, true, true, true);
//        PlayerViewController.getInstance().seek();
//        PlayerViewController.getInstance().playResume();
//        _player.setOnSeekCompleteListener(null);
//    }
//
//    /**
//     * 播放对应位置
//     */
//    public void play() {
//        _hasPlay = true;
//        player_start_btn.setVisibility(View.GONE);
//        iv_player_thumb.setVisibility(GONE);
//        if (_hasShit) {
//            _hasShit = false;
//            if (!_hasSeek) {
//                _player.clearScreen();
//                _player.setOnSeekCompleteListener(PlayerViewController.getInstance());
//                _player.seekByTimeCode(mLaststartTime * 1000D, true, true, true);
//                PlayerViewController.getInstance().seek();
//                //LogUtil.e(TAG, _sf.format(new Date(mLaststartTime * 1000L)));
//            } else {
//                _hasSeek = false;
//                PlayerViewController.getInstance().playResume();
//            }
//        } else {
//            PlayerViewController.getInstance().playResume();
//        }
//    }
//
//    /**
//     * 暂停
//     */
//    public void pause() {
//        player_start_btn.setVisibility(View.VISIBLE);
//        crsb_time.setShowProgress(false);
//        PlayerViewController.getInstance().playPause();
//    }
//
//    /**
//     * 恢复播放
//     */
//    public void resume() {
//         if (_shouldplay) {
//            player_start_btn.setVisibility(View.GONE);
//            iv_player_thumb.setVisibility(GONE);
//            PlayerViewController.getInstance().playResume();
//        }
//    }
//
//    /**
//     * 取消
//     */
//    public void cancel() {
//        mClipPath = "";
//        crsb_time.clearRangseekbar();
//        crsb_time.setShowProgress(false);
//        _hasPlay = false;
//        time_code.setText("00:00:00");
//        CustomOkHttpClient.cancleAll(requestLiveDetailCommand);
//        CustomOkHttpClient.cancleAll(requestLiveTimeCodesCommand);
//        DownloadService.stop(getContext());
//        Runtime.getRuntime().gc();
//    }
//
//    /**
//     * 确定
//     */
//    public void sure() {
//        GlideUtil.loadImage(getContext(), UrlHelper.getThumbUrl(mClipPath, mLaststartTime), iv_player_thumb);
//        iv_player_thumb.setVisibility(GONE);
//        pause();
//    }
//
//    /**
//     * 销毁
//     */
//    public void release() {
//        CustomOkHttpClient.cancleAll(requestLiveDetailCommand);
//        CustomOkHttpClient.cancleAll(requestLiveTimeCodesCommand);
//        //crsb_time.setOnRangeChangedListener(null);
//    }
//
//    /**
//     * 进入后台
//     */
//    public void onbackground() {
//        if (_player.playing()) {
//            _shouldplay = true;
//        } else {
//            _shouldplay = false;
//        }
//        pause();
//    }
//}
